/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.mala.view;

import br.jm.mala.entity.Atividade;
import br.jm.mala.entity.Categoria;
import br.jm.mala.entity.CategoriaGrupo;
import br.jm.mala.entity.CepBairro;
import br.jm.mala.entity.CepCidade;
import br.jm.mala.entity.CepEndereco;
import br.jm.mala.entity.CepUf;
import br.jm.mala.entity.Sucmala;
import br.jm.mala.lazyModel.GenericLazyDataModel;
import br.jm.mala.service.AtividadeService;
import br.jm.mala.service.CategoriaGrupoService;
import br.jm.mala.service.CategoriaService;
import br.jm.mala.service.SucService;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.context.RequestContext;
import org.primefaces.model.LazyDataModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 *
 * @author joao
 */
@Component("sucView")
@Scope("view")
public class SucView implements Serializable {
    private static final long serialVersionUID = -2286318044711775118L;

    private final SucService sucService;
    private final CategoriaService categoriaService;
    private final CategoriaGrupoService categoriaGrupoService;
    private final AtividadeService atividadeService;
    private LazyDataModel<Sucmala> sucMalaLazy;
    private Sucmala selectedSucMala;
    private FacesMessage msg;
    private List<CategoriaGrupo> categoriaGrupoList;

    @Autowired
    public SucView(SucService sucService,CategoriaService categoriaService,CategoriaGrupoService categoriaGrupoService,AtividadeService atividadeService) {
        this.categoriaGrupoService = categoriaGrupoService;
        this.categoriaService = categoriaService;
        this.sucService = sucService;
        this.atividadeService = atividadeService;
        
        this.sucMalaLazy = new GenericLazyDataModel(sucService, null, null, "Sucmala");

        this.selectedSucMala = new Sucmala();
        this.selectedSucMala.setIdAtividade(new Atividade());
        this.selectedSucMala.setIdCategoria(new Categoria());
        this.selectedSucMala.setIdGrupo(new CategoriaGrupo());
        CepUf cepUf = new CepUf();
        CepCidade cepCidade = new CepCidade();
        CepBairro cepBairro = new CepBairro();
        CepEndereco cepEndereco = new CepEndereco();
        cepCidade.setCodUf(cepUf);
        cepBairro.setCodCidade(cepCidade);
        cepEndereco.setCodBairro(cepBairro);
        
        categoriaGrupoList = this.categoriaGrupoService.loadAll();
         
        this.selectedSucMala.setCodLogradouro(cepEndereco);
        MenuView.salvar = true;
    }

    public LazyDataModel<Sucmala> getSucMalaLazy() {
        return sucMalaLazy;
    }

    public void setSucMalaLazy(LazyDataModel<Sucmala> sucMalaLazy) {
        this.sucMalaLazy = sucMalaLazy;
    }

    public Sucmala getSelectedSucMala() {
        return selectedSucMala;
    }

    public void setSelectedSucMala(Sucmala selectedSucMala) {
        this.selectedSucMala = selectedSucMala;
    }

    public void preparaInserir(ActionEvent event) {
        this.selectedSucMala = new Sucmala();
        this.selectedSucMala.setIdAtividade(new Atividade());
        this.selectedSucMala.setIdCategoria(new Categoria());
        this.selectedSucMala.setIdGrupo(new CategoriaGrupo());
        CepUf cepUf = new CepUf();
        CepCidade cepCidade = new CepCidade();
        CepBairro cepBairro = new CepBairro();
        CepEndereco cepEndereco = new CepEndereco();
        cepCidade.setCodUf(cepUf);
        cepBairro.setCodCidade(cepCidade);
        cepEndereco.setCodBairro(cepBairro);
         
        this.selectedSucMala.setCodLogradouro(cepEndereco);
        MenuView.salvar = true;
    }

    public void inserir(ActionEvent actionEvent) {
        msg = null;

        try {
            this.selectedSucMala.setIdSuc(null);
            this.sucService.create(selectedSucMala);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "SUC Inserido com Sucesso", this.selectedSucMala.getRazSoc());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir", this.selectedSucMala.getRazSoc());
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        msg = null;

        try {
            this.sucService.edit(selectedSucMala);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "SUC Alterado com Sucesso", this.selectedSucMala.getRazSoc());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar", this.selectedSucMala.getRazSoc());
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        msg = null;

        try {
            this.sucService.destroy(selectedSucMala);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "SUC Excluido com Sucesso", this.selectedSucMala.getRazSoc());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + this.selectedSucMala.getRazSoc(), "SUC SENDO UTILIZADO EM ALGUM PROCESSO!");
        } finally {
            preparaInserir(actionEvent);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public List<CategoriaGrupo> getCategoriaGrupoList() {
        return categoriaGrupoList;
    }

    public void setCategoriaGrupoList(List<CategoriaGrupo> categoriaGrupoList) {
        this.categoriaGrupoList = categoriaGrupoList;
    }
    
}
